home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 126-150 / scopedisk132 / algorhythms / source / scales.c < prev    next >
C/C++ Source or Header  |  1995-03-19  |  3KB  |  159 lines

  1. /* automusicscales.c */
  2. /* Copyright 1990 Thomas E. Janzen All Rights Reserved */
  3. /*
  4. **  FACILITY:
  5. **
  6. **    AlgoRhythms music improviser on Commodore (TM) Amiga (TM)
  7. **    compiled with Lattice (TM) C 5.05
  8. **
  9. **  ABSTRACT:
  10. **
  11. **    Algorhythms improvises music over the MIDI serial port.
  12. **
  13. **  AUTHORS: Thomas E. Janzen
  14. **
  15. **  CREATION DATE:    26-MAR-1990
  16. **
  17. **  MODIFICATION HISTORY:
  18. **    DATE    NAME    DESCRIPTION
  19. **--
  20. */
  21. #include "math.h"
  22.  
  23. #define    CHROMATIC (1)
  24. #define SHORTPENTATONIC (2)
  25. #define HIRA (3)
  26. #define KUMOI (4)
  27. #define KOKIN (5)
  28. #define WHOLETONE (6)
  29. #define DIATONIC (7)
  30. #define HARMONIC (8)
  31. #define HUNGARIAN (9)
  32. #define DIMINISHED (10)
  33. #define LONGPENTATONIC (11)
  34.  
  35. int InstallScale(const int Select, int scale[]) {
  36.     const int hira[12]=
  37.         {57,59,60,64,65,69,71,72,76,77,81,83}; /*hira joshi koto*/
  38.     const int kumoi[12]=
  39.         {57,58,62,64,65,69,70,74,76,77,81,83};/*kumoi joshi koto*/
  40.     const int kokin[11]=
  41.         {59,62,64,65,69,71,74,76,77,81,83};   /*kokin joshi koto*/
  42.     const int chromatic[12]={0,1,2,3,4,5,6,7,8,9,10,11}; /*chromatic*/
  43.     const int lucy[13]={48,50,53,55,58,60,62,65,67,70,72,74,77};
  44.     const int Diatonic[7]={0,2,4,5,7,9,11};
  45.     const int HarmMinor[7]={0,2,3,5,7,8,11};
  46.     const int HungMinor[7]={0,2,3,6,7,8,11};
  47.     const int diminished[8]={0,2,3,5,6,8,9,11};
  48.     const int pentatonic[5]={0,2,4,7,9};
  49.     const int wholetone[6]={0,2,4,6,8,10}; /*whole tone scale*/
  50.  
  51.     register int i;
  52.     register int oct;
  53.         
  54.     switch(Select) {
  55.         case CHROMATIC: /*chromatic*/
  56.             for (oct=0; oct<7; oct++) {
  57.                 for (i=0; i<7; i++) {
  58.                     scale[i+(oct*12)]=
  59.                         chromatic[i]+((oct+2)*12);
  60.                 }
  61.             }
  62.             return 84;
  63.             break;
  64.         case SHORTPENTATONIC: /*Pentatonic (Lucy) */
  65.             for (i=0; i<13; i++) {
  66.                 scale[i] = lucy[i];
  67.             }
  68.             return 13;
  69.             break;
  70.         case HIRA:
  71.             for (i=0; i<12; i++) {
  72.                 scale[i]=hira[i];
  73.             }
  74.             return 12;
  75.             break;
  76.         case KUMOI:
  77.             for (i=0; i<12; i++) {
  78.                 scale[i]=kumoi[i];
  79.             }
  80.             return 12;
  81.             break;
  82.         case KOKIN:
  83.             for (i=0; i<11; i++) {
  84.                 scale[i]=kokin[i];
  85.             }
  86.             return 11;
  87.             break;
  88.         case WHOLETONE: /*whole tone*/
  89.             for (oct=0; oct<7; oct++) {
  90.                 for (i=0; i<7; i++) {
  91.                     scale[i+(oct*6)]=
  92.                         wholetone[i]+((oct+2)*12);
  93.                 }
  94.             }
  95.             return 42;
  96.             break;
  97.         case DIATONIC: /*diatonic*/
  98.             for (oct=0; oct<7; oct++) {
  99.                 for (i=0; i<7; i++) {
  100.                     scale[i+(oct*7)]=
  101.                         Diatonic[i]+((oct+2)*12);
  102.                 }
  103.             }
  104.             return 49;
  105.             break;
  106.         case HARMONIC: /* harmonic minor */
  107.             for (oct=0; oct<7; oct++) {
  108.                 for (i=0; i<7; i++) {
  109.                     scale[i+(oct*7)]=
  110.                     HarmMinor[i]+((oct+2)*12);
  111.                 }
  112.             }
  113.             return 49;
  114.             break;
  115.         case HUNGARIAN: /* hungarian minor */
  116.             for (oct=0; oct<7; oct++) {
  117.                 for (i=0; i<7; i++) {
  118.                     scale[i+(oct*7)]=
  119.                     HungMinor[i]+((oct+2)*12);
  120.                 }
  121.             }
  122.             return 49;
  123.             break;
  124.         case DIMINISHED: /*diminished scale */
  125.             for (oct=0; oct<7; oct++) {
  126.                 for(i=0; i<8; i++) {
  127.                     scale[i+(oct*8)]=
  128.                         diminished[i]+((oct+2)*12);
  129.                 }
  130.             }
  131.             return 56;
  132.             break;
  133.         case LONGPENTATONIC: /*long pentatonic scale */
  134.             for (oct=0; oct<7; oct++) {
  135.                 for(i=0; i<5; i++) {
  136.                     scale[i+(oct*5)]=
  137.                         pentatonic[i]+((oct+2)*12);
  138.                 }
  139.             }
  140.             return 35;
  141.             break;
  142.         default:
  143.             for (i=0; i<13; i++) {
  144.                 scale[i] = lucy[i];
  145.             }
  146.             return 13;
  147.             break;
  148.         }
  149. }
  150.  
  151. void TransposeScale(const int transpose, int *scale, const int range) {
  152.     register int i;
  153.     if (abs(transpose)<12) {
  154.         for(i=0;i<range;i++) {
  155.             scale[i]=scale[i]+transpose;
  156.         }
  157.     }
  158. }
  159.